33e7d09f5fd508343dd75aae6c3e14ad11c3b15a,community/kernel/src/main/java/org/neo4j/kernel/impl/nioneo/store/PropertyStore.java,PropertyStore,encodeValue,#PropertyBlock#number#Object#,560

Before Change


                block.addValueRecord( valueRecord );
            }
        }
        else if ( value instanceof Integer ) block.setSingleBlock( bits32WithKeyAndType( keyId, PropertyType.INT ).put( ((Integer)value).intValue() ).getLongs()[0] );
        else if ( value instanceof Boolean ) block.setSingleBlock( bits32WithKeyAndType( keyId, PropertyType.BOOL ).put( ((Boolean)value).booleanValue() ? 1 : 0 ).getLongs()[0] );
        else if ( value instanceof Float ) block.setSingleBlock( bits32WithKeyAndType( keyId, PropertyType.FLOAT ).put( Float.floatToRawIntBits( ((Float) value).floatValue() ) ).getLongs()[0] );
        else if ( value instanceof Long )
        {
            if ( ShortArray.LONG.getRequiredBits( value ) <= 35 )
            {   // We only need one block for this value
                block.setValueBlocks( bits32WithKeyAndType( keyId, PropertyType.LONG ).put( (byte)1, 1 ).put( ((Long)value).longValue(), 35 ).getLongs() );
            }
            else
            {   // We need two blocks for this value

After Change


        return arrayPropertyStore.allocateRecords( valueBlockId, array );
    }

    public void encodeValue( PropertyBlock block, int keyId, Object value )
    {
//        try
//        {
        if ( value instanceof String )
        {
            String string = (String) value;
            if ( LongerShortString.encode( keyId, string, block,
                    PropertyType.getPayloadSize() ) ) return;

            Bits bits = bits32WithKeyAndType( keyId, PropertyType.STRING );
            long stringBlockId = nextStringBlockId();
            bits.put( stringBlockId, 36 );
            block.setSingleBlock( bits.getLongs()[0] );
            byte[] encodedString = getBestSuitedEncoding( string );
            Collection<DynamicRecord> valueRecords = allocateStringRecords( stringBlockId, encodedString );
            for ( DynamicRecord valueRecord : valueRecords )
            {
                valueRecord.setType( PropertyType.STRING.intValue() );
                block.addValueRecord( valueRecord );
            }
        }
        else if ( value instanceof Integer ) setSingleBlockValue( block, keyId, PropertyType.INT, ((Integer)value).longValue() );
        else if ( value instanceof Boolean ) setSingleBlockValue( block, keyId, PropertyType.BOOL, (((Boolean)value).booleanValue()?1L:0L) );
        else if ( value instanceof Float ) setSingleBlockValue( block, keyId, PropertyType.FLOAT, (long)Float.floatToRawIntBits( ((Float) value).floatValue() ) );
        else if ( value instanceof Long )
        {
            long keyAndType = keyId | (((long)PropertyType.LONG.intValue()) << 24);
            if ( ShortArray.LONG.getRequiredBits( value ) <= 35 )
            {   // We only need one block for this value, special layout compared to, say, an integer
                block.setSingleBlock( keyAndType | (1L << 28) |  (((Long)value).longValue() << 29) );
            }
            else
            {   // We need two blocks for this value
                block.setValueBlocks( new long[] {keyAndType, ((Long)value).longValue()} );
            }
        }
        else if ( value instanceof Double ) block.setValueBlocks( new long[] { keyId | (((long)PropertyType.DOUBLE.intValue()) << 24), Double.doubleToRawLongBits( ((Double)value).doubleValue() ) } );